#usiamo un dizionario
dati=[{"opera":"il signore degli anelli", "editore":"bompiani"},
{"opera":"il grande gatsby", "editore":"crescere"},
{"opera":"cime tempestose", "editore":"crescere"},
{"opera":"orgoglio e pregiudizio", "editore":"crescere"},
{"opera":"il libro dei racconti perduti", "editore":"bompiani"},
{"opera":"la repubblica", "editore":"bompiani"},
{"opera":"machine learning", "editore":"springer"}]

#primo esercizio
def esercizio1(elenco, titolo):
for dizionario in elenco:
if dizionario["opera"]==titolo:
return dizionario["editore"]
return None

#proviamo il primo esercizio
print(esercizio1(dati, "la repubblica"))

#secondo esercizio
def esercizio2(elenco):
distinte=[]
for dizionario in elenco:
if dizionario["editore"] not in distinte:
distinte.append(dizionario["editore"])
return len(distinte)

#proviamo il secondo esercizio
print(esercizio2(dati))


#terzo esercizio
def esercizio3(elenco):
opereeditore= []
for dizionario in elenco:
voce = {"editore":dizionario["editore"], "n_opere":0}
if voce not in opereeditore:
opereeditore.append(voce)
for dizionario in elenco:
for voce in opereeditore:
if dizionario["editore"]== voce["editore"]:
voce.update({"n_opere" : voce["n_opere"]+1})
return opereeditore

#proviamo il terzo esercizio
print(esercizio3(dati))

#alternativa la terzo esercizio
def update(opereeditore, editore):
indice = 0
while indice < len(opereeditore):
if opereeditore[indice]["editore"] == editore:
opereeditore[indice].update({"n_opere": opereeditore[indice]["n_opere"] + 1})
break
indice += 1
if indice == len(opereeditore):
opereeditore.append({"editore": editore, "n_opere": 1})


def esercizio3alternativa(elenco):
opereeditore = []
for dizionario in elenco:
update(opereeditore, dizionario["editore"])
return opereeditore

#proviamo l'alternativa
print(esercizio3alternativa(dati))